# -*- coding: utf-8 -*-#
#-------------------------------------------------------------------------------
# 建立者:        黄周云  
# Name:         test03
# Description:   例12.8
# Author:       ASUS
# Date:         2019/3/27
#-------------------------------------------------------------------------------


from heapq import *
from random import *
data = [1,2,3,4,5,6,7,8,9]
#定义一个堆，其实堆就是一个列表，只是通过heapq模块中的函数利用堆算法来改变列表中的元素而已
heap = []
for n in data:
    value = choice(data)
    #将value添加进堆
    heappush(heap,value)
print(heap)
heappush(heap,2.5)
print(heap)
#弹出heap中的最小值，并获取这个值
print(heappop(heap))
print(heap)

data1 = [6,3,1,12,8]
#将列表转换为堆，也就是重新安排列表中元素的顺序
heapify(data1)
print(data1)
#弹出data1中的最小值，并将100添加进堆
heapreplace(data1,100)
print(data1)
#得到data1中最大的前n个值,以列表形式返回
print(nlargest(1,data1))
print(nlargest(2,data1))
#得到data1中最小的前n个值，以列表形式返回
print(nsmallest(1,data1))
print(nsmallest(3,data1))
#合并多个有序列表，通过关键字指定一个函数len，也就是说，会按照列表元素值的长度进行排序
print(list(merge([1,3,1234,7],[0,2,4,8],[],[25])))
print(list(merge(["dog","horse"],["cat","fish","kangaroo"],key=len)))